package cn.tom.tool;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Base64;


/**
 * @author mhx
 * @date 2019年06月29日 02:55
 */
public class ImageBinaryUtil {
    static Base64.Encoder encoder = Base64.getEncoder();
    ;
    static Base64.Decoder decoder = Base64.getDecoder();
    ;

    /**
     * 测试用例
     *
     * @param args
     */
    public static void main(String[] args) throws IOException {
        File toImFIle = new File("C://Users/mhx/Desktop/xjpic.jpg");//图片路径
        System.out.println(getImageBinary(toImFIle));//输出base64字符串

        String ImageBase64String = getImageBinary(new File("C://Users/mhx/Desktop/xjpic.jpg"));//获取base64字符串
        BufferedImage bi1 = base64StringToImage(ImageBase64String);//转成img
        //实际应用根据业务需求输出，这里测试输出到本地
        File w2 = new File("C://Users/mhx/Desktop/QQ.bmp");//可以是jpg,png,gif格式
        ImageIO.write(bi1, "jpg", w2);//不管输出什么格式图片，此处不需改动
    }


    /**
     * 传图片文件 生成 base64
     *
     * @param f
     * @return
     */
    public static String getImageBinary(File f) {
        BufferedImage bi;
        try {
            bi = ImageIO.read(f);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write(bi, "png", baos);
            byte[] bytes = baos.toByteArray();

            return encoder.encodeToString(bytes).trim();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * base64字符串 转 图片
     *
     * @param base64String
     */
    public static BufferedImage base64StringToImage(String base64String) {
        try {
            byte[] bytes1 = decoder.decode(base64String);
            ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
            return ImageIO.read(bais);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
